package com.cskaoyan.java._1handle._4finally;

/**
 * 首先finally是一个关键字，它的使用和异常处理的try...catch结构是密不可分的。
 * 语法格式1:
 * try{
 * }catch(){
 * }finally{
 * }
 * // 中间的catch代码块可灵活增减。
 * try{
 * }catch(){
 * }catch(){
 * }finally{
 * }
 * finally代码块放在catch代码块的后面
 *
 * finally代码块的作用:
 * 无论try...catch结构中发生了什么事情，都不能阻止finally代码块的执行。
 *
 * 它的用途是什么?
 *      当有一段代码,需要在无论try...catch结构中发生了什么事情都必须执行时,就需要使用finally代码块
 *
 * @since 17:09
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        System.out.println("before");
        // System.exit(0);
        try {
            System.out.println("hello world!");
            int[] arr = null;
            // System.out.println(arr.length);
            arr = new int[0];
            System.out.println(arr[0]);
            // return;
        } catch (NullPointerException e) {
            e.printStackTrace();
            return;
        } finally {
            // finally代码块永远会执行,所以把释放资源的代码写在这里,可以保证资源稳定被释放
            System.out.println("finally代码块执行了!");
        }
        System.out.println("after");
        // 在下面写释放资源的代码,就会有可能因为异常导致程序终止,而不能正确释放资源
    }
}
